package Day_0203.MYSQL;

/**
 * @author zxc
 * @date 2023/02/03 21:35
 **/
public class InnoDB_MyISAM {
    public static void main(String[] args) {
        /**
         * InnoDB和MyISAM存储引擎的区别
         * ===》
         * 1. InnoDB支持事务，MyISAM不支持，
         * 对于InnoDB每一条SQL语言都默认封装成事务，自动提交，这样会影响速度，
         * ===》所以最好把多条SQL语言放在begin和commit之间，组成一个事务；
         *
         * 2. InnoDB支持外键，而MyISAM不支持。
         * 对一个包含外键的InnoDB表转为MYISAM会失败；
         *
         * 3. 存储引擎索引类型不同
         * （1）InnoDB是聚集索引，数据文件是和索引绑在一起的，必须要有主键，通过主键索引效率很高。
         *  但是辅助索引需要两次查询，先查询到主键，然后再通过主键查询到数据。
         *  因此，主键不应该过大，因为主键太大，其他索引也都会很大。
         *
         * （2）而MyISAM是非聚集索引，数据文件和索引是分离的，索引保存的是数据文件的指针。
         *  主键索引和辅助索引是相互独立的。
         *
         * 4. InnoDB不保存表的具体行数，执行select count(*) from table时需要全表扫描。
         * 而MyISAM用一个变量保存了整个表的行数，执行上述语句时只需要读出该变量即可，速度很快;
         *
         * 5.存储引擎是否支持全局索引
         * （1）Innodb不支持全文索引;
         * （2）而MyISAM支持全文索引，查询效率上MyISAM要高；
         *
         */

        /**
         * InnoDB和MyISAM存储引擎之间的区别
         * ===》
         * 1.在 MySQL 5.1 及之前的版本中，MyISAM 是默认的存储引擎，而在 MySQL 5.5 版本以后，默认使用 InnoDB 存储引擎。
         *
         * 2.MyISAM存储引擎 ：
         * （1）MyISAM 不支持行级锁，换句话说，MyISAM 会对整张表加锁，而不是针对行。（表级锁）
         * （2）同时，MyISAM 不支持事务和外键。
         * （3）MyISAM 可被压缩，存储空间较小，而且 MyISAM 在筛选大量数据时非常快。
         *
         * 3.InnoDB存储引擎 ：
         * （1）InnoDB 是事务型引擎，当事务异常提交时，会被回滚。同时，InnoDB 支持行锁。
         * （3）InnoDB 需要更多存储空间，会在内存中建立其专用的缓冲池用于高速缓冲数据和索引。
         * （3）InnoDB 支持自动奔溃恢复特性。
         *  ===>（InnoDB存储引擎，有着自动崩溃恢复特性;）
         *
         */
    }
}
